package org.mx.dal.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 描述： 定义指定的Entity是一个Elastic索引的注解
 *
 * @author John.Peng
 * Date time 2018/4/5 上午7:38
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ElasticIndex {
	/**
	 * 指定的索引名字，如果没有指定，则使用该实体类的名字<pre>Class.getName()</pre>。
	 *
	 * @return 索引名称
	 */
	String value() default "";

	/**
	 * 指定的索引别名，如果没有指定，泽使用该实体类的明细<pre>Class.getName()</pre>。
	 * @return 索引别名
	 */
	ElasticIndexAlias[] alias() default {};

	/**
	 * shard数量
	 * @return shard数量
	 */
	int number_of_shards() default 1;

	/**
	 * 复制集数量
	 * @return 复制集数量
	 */
	int number_of_replicas() default 1;

	/**
	 * 是否自动扩展复制集
	 * @return 是否自动扩展复制集
	 */
	boolean auto_expand_replicas() default false;

	/**
	 * 路由分区数量
	 * @return 路由分区数量
	 */
	int routing_partition_size() default 1;

}
